#include "Dri_WebSocket.h"
#include "Inf_ES8311.h"
#include "Inf_OV2640.h"
#include "freertos/ringbuf.h"
#include "string.h"

static const char *TAG = "Dri_WebSocket";

/**
 * @brief WebSocket 事件处理函数，用于处理各种 WebSocket 事件
 *
 * @param handler_args 传递给事件处理函数的参数，通常是 WebSocket 客户端句柄
 * @param base 事件的基础类型，用于区分不同的事件源
 * @param event_id 事件的 ID，用于标识不同类型的 WebSocket 事件
 * @param event_data 事件的数据，包含了事件的详细信息
 */
void websocket_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
  // 将事件数据转换为 esp_websocket_event_data_t 类型的指针，方便后续访问事件详细信息
  esp_websocket_event_data_t *data = (esp_websocket_event_data_t *)event_data;
  // 根据不同的事件 ID 执行相应的操作
  switch (event_id) {
    case WEBSOCKET_EVENT_BEGIN:
      // 当 WebSocket 事件处理开始时，输出日志信息
      ESP_LOGI(TAG, "事件处理开始时");
      break;
    case WEBSOCKET_EVENT_CONNECTED:
      // 当 WebSocket 客户端成功连接到服务器时，输出日志信息
      ESP_LOGI(TAG, "客户端成功连接到服务器时");
      break;
    case WEBSOCKET_EVENT_DISCONNECTED:
      // 当 WebSocket 连接断开时，输出日志信息
      ESP_LOGI(TAG, "连接断开时，输出日志信息");
      break;
    case WEBSOCKET_EVENT_DATA:
      // 当接收到 WebSocket 数据时，输出日志信息
      ESP_LOGI(TAG, "当接收到 WebSocket 数据时");
      // 操作码 0x2 表示二进制数据
      if (data->op_code == 0x2) {
        if (data->data_len > 0) {
           // MY_LOGE("收到二进制数据");
          Inf_ES8311_SendData((char *)data->data_ptr, data->data_len);
        }
      }

      // 输出接收到的有效负载的总长度、当前数据长度和偏移量
      // ESP_LOGW(TAG, "Total payload length=%d, data_len=%d, current payload offset=%d\r\n", data->payload_len, data->data_len,
      // data->payload_offset);
      break;
    case WEBSOCKET_EVENT_ERROR:
      // 当 WebSocket 发生错误时，输出日志信息
      ESP_LOGI(TAG, "当 WebSocket 发生错误时");
      break;
    case WEBSOCKET_EVENT_FINISH:
      // 当 WebSocket 事件处理完成时，输出日志信息
      ESP_LOGI(TAG, "当 WebSocket 事件处理完成时");
      break;
  }
}



